﻿using CommonServiceLocator;
using GalaSoft.MvvmLight.Ioc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zhy.DigitaPlatform.DataAccess;
using Zhy.DigitaPlatform.IDataAccess;
using Zhy.DigitaPlatform.ViewModels;

namespace Zhy.DigitaPlatform.ViewModels
{
    /// <summary>
    /// 用于管理IOC容器注册
    /// </summary>
    public class ViewModelLocator
    {
        /// <summary>
        /// 初始化
        /// </summary>
        public ViewModelLocator()
        {
            // 设置全局的IOC容器单例 - 后期需要了解一下
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
            // IOC注册登陆业务类
            SimpleIoc.Default.Register<LoginViewModel>();
            // 注册主窗口业务类
            SimpleIoc.Default.Register<MainViewModel>();
            // 注册组态业务类
            SimpleIoc.Default.Register<ConfigViewModel>();
            // 注册数据库操作类
            SimpleIoc.Default.Register<ILocalDataAccess, LocalDataAccess>();
        }

        #region 这里定义的属性可以在View页面进行绑定
        // 这种属性定义方式会有歧义，感觉好像定义的字段
        /// <summary>
        /// 通过IOC获取登陆类
        /// </summary>
        public LoginViewModel LoginViewModel => ServiceLocator.Current.GetInstance<LoginViewModel>();
        // 上面写法等同于下面完整处理
        //public LoginViewModel value
        //{
        //    get
        //    {
        //        return ServiceLocator.Current.GetInstance<LoginViewModel>();
        //    }
        //}
        /// <summary>
        /// 注册主窗口业务类
        /// </summary>
        public MainViewModel MainViewModel => ServiceLocator.Current.GetInstance<MainViewModel>();
        /// <summary>
        /// 组态窗口业务类
        /// </summary>
        public ConfigViewModel ConfigViewModel => ServiceLocator.Current.GetInstance<ConfigViewModel>();
        #endregion
    }
}
